# Makefile for C INI Parser

# 编译器和编译选项
CC = gcc
CFLAGS = -Wall -Wextra -O2 -Iinc

# 输出目录
OUT_DIR = ./out

# 目标文件
TARGET = $(OUT_DIR)/test_ini
TEST_OBJS = test_ini.o
LIB_OBJS = $(OUT_DIR)/c_ini.o

# 默认目标
all: $(TARGET)

# 创建输出目录
$(OUT_DIR):
	mkdir -p $(OUT_DIR)

# 编译测试程序
$(TARGET): $(OUT_DIR) $(LIB_OBJS) $(TEST_OBJS)
	$(CC) $(CFLAGS) -o $@ $^ $(LIB_OBJS)

# 编译源文件为目标文件
$(OUT_DIR)/%.o: src/%.c $(OUT_DIR)
	$(CC) $(CFLAGS) -c -o $@ $<

%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $<

# 清理编译生成的文件
clean:
	rm -rf $(OUT_DIR)
	rm -f $(TEST_OBJS) test_config.ini modified_config.ini

# 运行测试
run: $(TARGET)
	$(TARGET)

# 构建静态库
$(OUT_DIR)/libc_ini.a: $(LIB_OBJS)
	ar rcs $@ $^

# 构建动态库
$(OUT_DIR)/libc_ini.so: $(LIB_OBJS)
	$(CC) -shared -o $@ $^

# 安装库文件（需要管理员权限）
install: $(OUT_DIR)/libc_ini.a $(OUT_DIR)/libc_ini.so
	mkdir -p /usr/local/lib
	mkdir -p /usr/local/include/c_ini
	cp $(OUT_DIR)/libc_ini.a $(OUT_DIR)/libc_ini.so /usr/local/lib/
	cp inc/c_ini/c_ini.h /usr/local/include/c_ini/
	ldconfig

# 卸载库文件（需要管理员权限）
uninstall:
	rm -f /usr/local/lib/libc_ini.a /usr/local/lib/libc_ini.so
	rm -f /usr/local/include/c_ini/c_ini.h
	ldconfig

.PHONY: all clean run install uninstall